﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Boom.Navigation;

namespace Boom.GameObjects
{
    public class ListItem:DrawableGameComponent
    {
        private List<Item> _List;
        private List<Texture2D> _ListTextureItem;
        private int _Count;
        private Random _Rand;
        private List<int> _Random_Position_Item;
        private int _TimeBoom;

        public List<Item> List
        {
            get { return _List; }
            set { _List = value; }
        }

        public ListItem(Game Mygame, ref List<Texture2D> ListTexture, List<Vector2> PosDesBrick, int Count)
            : base(Mygame)
        {
            _List = new List<Item>();
            _ListTextureItem = ListTexture;
            _Count = Count;
            _Rand = new Random();
            _Random_Position_Item = new List<int>();
            _TimeBoom = Config.TimeBoom;
            Create_List_Item(PosDesBrick);
        }

        //Khởi tạo các đối tượng vật phẩm dựa trên tọa độ gạch
        private void Create_List_Item(List<Vector2> PosDesBrick)
        {
            int Count = 0;
            int Type;
            int IndexPosBrick;
            int Result;
            for (int i = 0; i < _Count; i++)
            {
                //Hạn chế vật phẩm tăng mạng nhân vật
                do
                {
                    Type = _Rand.Next(4);
                }
                while (Type == 1 && Count == Config.MaxItemLive);
                if (Type == 1) Count++;

                //Kiểm tra tọa độ vật phẩm ngẫu nhiên tránh trùng tọa độ
                do
                {
                    IndexPosBrick = _Rand.Next(PosDesBrick.Count);
                    Result = _Random_Position_Item.BinarySearch(IndexPosBrick);
                }
                while (Result >= 0);

                _Random_Position_Item.Add(IndexPosBrick);
                _Random_Position_Item.Sort();

                Vector2 Position = PosDesBrick[IndexPosBrick];
                Texture2D temp= _ListTextureItem[Type];
                List.Add(new Item(Game, ref temp, Position, Type));
            }
        }

        public override void Initialize()
        {
            for (int i = 0; i < List.Count; i++)
            {
                List[i].Initialize();
            }
            base.Initialize();
        }

        public override void Update(GameTime gameTime)
        {
            for (int i = 0; i < List.Count; i++)
            {
                List[i].Update(gameTime);
                if (!List[i].ShowItem && !List[i].Enabled && List[i].Visible)
                {
                    List.RemoveAt(i);
                }
            }
            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            for (int i = 0; i < List.Count; i++)
            {
                List[i].Draw(gameTime);
            }
            base.Draw(gameTime);
        }
    }
}
